<? 
class Cart
{
	var   $cart;
	var $totalCount; //商品总数量
	var $totalPrices; //商品总金额
		
   	function  __construct()
   	{   	 
		$this->totalCount = 0;
		$this->totalPrice = 0;
		$this->cart = array();
	}

	/**
    * 增加商品到当前购物车
    *
    * @access 
    * @param array $item 商品信息（一维数组：array(商品ID,商品名称,商品单价,商品数量)）
    * 商品ID=货号^颜色^尺码. 以此来应用到鞋子中
	* @return array 返回当前购物车内商品的数组
	*/
	function add($item)
	{
		if(!is_array($item)||is_null($item)) return $this->_getArray($this->cart);
		
		if(!is_numeric(end($item))||(!is_numeric(prev($item)))) 
		{
			//echo "价格和数量必须是数字";
			return $this->_getArray($this->cart);
		}
		
		reset($item); //这一句是必须的，因为上面的判断已经移动了数组的指标
		$key = current($item);
		
		if($key=="") return $this->_getArray($this->cart);
		
		if($this->_isExists($key))  //商品是否已经存在？
		{ 
			$this->cart[$key]['count'] += end($item);
			return $this->_getArray($this->cart);
		}
		
		// echo  $key;
		$this->cart[$key]['ID'] = $key;
		$this->cart[$key]['name'] = next($item);
		$this->cart[$key]['price'] = next($item);
		$this->cart[$key]['count'] = next($item);
		return $this->_getArray($this->cart);
	}


	/**
	* 从当前购物车中取出部分或全部商品
	* 当 $key=="" 的时候，清空当前购物车
	* 当 $key!=""&&$count=="" 的时候，从当前购物车中拣出商品ID+号为 $key 的全部商品 
	* 当 $key!=""&&$count!="" 的时候，从当前购物车中拣出 $count个 商品ID号为 $key 的商品 
	*
	* @access 
	* @param string $key 商品ID
	* @return mixed 返回真假或当前购物车内商品的数组
	*/
	function remove($key="",$count="")
	{
		if($key=="") 
		{
			$this->cart = array();
			return true;
		}
		
		if(!array_key_exists($key,$this->cart)) return false;
		
		if($count=="") //移去这一类商品
		{
			unset($this->cart[$key]);
		}
		else		//移去$count个商品
		{ 
			$this->cart[$key]['count'] -= $count;
			if($this->cart[$key]['count']<=0) unset($this->cart[$key]);
		}
		
		return $this->_getArray($this->cart);
	}


	/**
	* 修改购物车内商品ID为 $key 的商品的数量为 $value
	*
	* @access 
	* @param string $key 商品ID
	* @param int $value 商品数量
	* @return array 返回当前购物车内商品的数组;
	*/
	function modi($key,$value)
	{
		if(!$this->_isExists($key)) return $this->_getArray($this->cart); //不存在此商品，直接返回

		if($value<=0) // value 太小，全部删除
		{
			unset($this->cart[$key]);
			return $this->_getArray($this->cart);
		}
		
		$this->cart[$key]['count'] = $value;
		return $this->_getArray($this->cart);
	}
	
	
	/**
	* 返回当前购物车内商品的数组
	*
	* @access 
	* @return array 返回当前购物车内商品的数组;
	*/
	public function getCart()
	{
		return $this->_getArray($this->cart);
	}


	/**
	* 判断当前购物车中是否存在商品ID号为$key的商品
	*
	* @access private
	* @param string $key 商品ID
	* @return bool true or false;
	*/
	function _isExists($key)
	{
		if(isset($this->cart[$key])&&!empty($this->cart[$key])&&array_key_exists($key,$this->cart))
		return true;
		return false;
	}


	/**
	* 重新排列购物车内的产品，以便于smarty读取
	*
	* @access private
	* @return array 返回已经排列好的购物车内的商品;
	*/
      
	function _getArray($array)
	{
		$myCart = array();
		foreach($array as $item)
		array_push($myCart,$item);
		return $myCart;
    }
    
    
	/**
	* 判断当前购物车是否为空，即没有任何商品
	*
	* @access 
	* @return bool true or false;
	*/
	function isEmpty()
	{
		return !count($this->cart);
	}


	/**
	* 取得部分统计信息
	*
	* @access private
	* @return bool true or false;
	*/
	function _stat(){
		if($this->isEmpty()) return false;
		
		foreach($this->cart as $item)
		{
			$this->totalCount += @end($item);
			$this->totalPrices += @prev($item);
		}

		return true;
     }
     
     
	/**
	* 取得当前购物车所有商品的总金额
	*
	* @access 
	* @return float 返回金额;
	*/
	function totalPrices()
	{
		if($this->_stat())
		return $this->totalPrices;
		return 0;
	}


	/**
	* 取得当前购物车所有商品的总数量和
	*
	* @access 
	* @return int ;
	*/
	function totalCount()
	{
		if($this->_stat())
		return $this->totalCount; 
		return 0;
	}		

}//End Class Cart
?>